/*
* 物料信息管理模块
*/
const express = require('express');
const router = express.Router();
// 引入数据库
const db = require("../../../config/db");
// 引入时间包
const moment = require("moment");
// 引入方法库
const { toCamelCase, toUnderlineCase, verifyToken} = require("../../../config/utils");
// 引入日志
const log = require("../../log");

// 查询物料产品信息管理表
router.get('/list', (req, res) => {
    console.log("===========查询物料产品信息管理表接口============");
    // 获取参数
    let {pageNum, pageSize, itemCode, itemName, itemTypeId} = req.query;
    let sql = "select * from md_item";
    let sql_where = "";
    // 判断参数是否为空
    if(itemCode) {
        sql_where += ` where item_code like '%${itemCode}%'`
    }
    if(itemName) {
        sql_where += ` ${itemCode ? "and" : "where"} item_name = '${itemName}'`
    }
    if(itemTypeId) {
        sql_where += ` ${itemCode || itemName ? "and" : "where"} item_type_id = '${itemTypeId}'`
    }
    // 分页查询
    sql_where += ` limit ${(pageNum - 1) * pageSize}, ${pageSize}`;
    sql += sql_where;

    // 查询数据库
    db.query("查询物料产品信息管理表", sql, (err, result) => {
        if (err) {
            res.send({
                code: 500,
                msg: '查询物料产品信息管理表失败'
            })
            return
        }
        // 查询总条数
        db.query("查询物料产品信息管理表总条数", `select count(*) as total from md_item ${sql_where}`, (err, total) => {
            if (err) {
                res.send({code: 500, msg: '查询物料产品信息管理表总条数失败'})
                return
            }
            if(result.length > 0) {
                // 变量Json数组key转成下划线第一个大写
                result = result.map(item => {
                    return toCamelCase(item)
                })
            }
            res.send({
                code: 200,
                msg: '查询成功',
                rows: result,
                total: total[0].total
            })
        })
        
    })
    
})

// 新增物料产品信息管理表
router.post("/", (req, res) => {
    console.log("===========新增物料产品信息管理表接口============");
    // 获取参数
    let {itemCode, itemName, enableFlag, itemTypeId, maxStock,  minStock, remark, safeStockFlag, specification, unitOfMeasure} = req.body;
    // 获取创建人
    let {username} = verifyToken(req.headers.authorization);
    
    // 获取创建时间
    let createTime = moment().format("YYYY-MM-DD HH:mm:ss");
    // 判断物料编码和物料名称是否重复
    let sql_check = `select * from md_item where item_code = '${itemCode}' or item_name = '${itemName}'`;
    
    // 查询数据库
    db.query("查询物料编码和物料名称是否重复", sql_check, (err, sql_check_res) => {
        if (err) {
            res.send({code: 500, msg: '查询物料编码和物料名称是否重复失败'})
            return
        }
        if(sql_check_res.length > 0) {
            res.send({code: 500, msg: '物料编码和物料名称已存在'})
            return
        }

        // 通过分类id查询分类名称
        let sql_type = `select item_type_code, item_type_name, item_or_product from md_item_type where item_type_id = '${itemTypeId}'`;
        db.query("通过分类id查询分类名称", sql_type, (err, type_result) => {
            if (err) {
                res.send({code: 500, msg: '通过分类id查询分类名称失败'})
                return
            }
            // 插入数据库
            let sql = `insert into md_item (item_code, item_name, enable_flag, item_type_id, max_stock, min_stock, safe_stock_flag, unit_of_measure, 
            remark, specification, create_time, create_by, item_type_code, item_type_name, item_or_product)
            values ('${itemCode}', '${itemName}', '${enableFlag}', '${itemTypeId}', '${maxStock}', '${minStock}', '${safeStockFlag}', '${unitOfMeasure}', 
            ${remark ? "'"+remark+"'" : null}, ${specification ? "'"+specification+"'" : null}, '${createTime}', '${username}',
            '${type_result[0].item_type_code}', '${type_result[0].item_type_name}', '${type_result[0].item_or_product}')`;
            
            db.query("新增物料产品信息管理表", sql, (err, result) => {
                if (err) {
                    res.send({code: 500, msg: '新增物料产品信息管理表失败'})
                    return
                }
                if(result.affectedRows > 0) {
                    res.send({code: 200, msg: '新增成功'})
                }else{
                    res.send({code: 500, msg: '新增失败'})
                }
            })
        })
       
    })
   
})

// 查询单个物料产品信息管理表
router.get("/:id", (req, res) => {
    console.log("===========查询单个物料产品信息管理表接口============");
    // 获取参数
    let {id} = req.params;
    // 查询数据库
    let sql = `select * from md_item where item_id = '${id}'`;
    db.query("查询单个物料产品信息管理表", sql, (err, result) => {
        if (err) {
            res.send({code: 500, msg: '查询单个物料产品信息管理表失败'})
            return
        }
        if(result.length > 0) {
            // 变量Json数组key转成下划线第一个大写
            result = result.map(item => {
                return toCamelCase(item)
            })
        }
        res.send({ code: 200, msg: '查询单个物料产品信息管理表成功', data: result[0]})
    })
})

// 修改物料产品信息管理表
router.put("/", (req, res) => {
    console.log("===========修改物料产品信息管理表接口============");
    // 获取参数
    let {itemId, itemName, enableFlag, itemTypeId, maxStock, minStock, safeStockFlag, unitOfMeasure, remark, specification} = req.body;
    // 获取更新人
    let {username} = verifyToken(req.headers.authorization)
    // 更新时间
    let updateTime = moment().format("YYYY-MM-DD HH:mm:ss");
     // 判断物料编码和物料名称是否重复
     let sql_check = `select * from md_item where item_name = '${itemName}' and item_id != ${itemId}`;
    
     // 查询数据库
     db.query("查询物料名称是否重复", sql_check, (err, sql_check_res) => {
         if (err) {
             res.send({code: 500, msg: '查询物料名称是否重复失败'})
             return
         }
         if(sql_check_res.length > 0) {
             res.send({code: 500, msg: '物料名称已存在'})
             return
         }
 
         // 通过分类id查询分类名称
         let sql_type = `select item_type_code, item_type_name, item_or_product from md_item_type where item_type_id = '${itemTypeId}'`;
         db.query("通过分类id查询分类名称", sql_type, (err, type_result) => {
             if (err) {
                res.send({code: 500, msg: '通过分类id查询分类名称失败'})
                return
             }
             // 更新数据库
             let sql = `update md_item set item_name = '${itemName}', enable_flag = '${enableFlag}', item_type_id = '${itemTypeId}', max_stock = '${maxStock}', 
             min_stock = '${minStock}', safe_stock_flag = '${safeStockFlag}', unit_of_measure = '${unitOfMeasure}', update_by = '${username}',
             remark = ${remark ? "'"+remark+"'" : null}, specification = ${specification ? "'"+specification+"'" : null}, update_time = '${updateTime}',
             item_type_code = '${type_result[0].item_type_code}', item_type_name = '${type_result[0].item_type_name}', item_or_product = '${type_result[0].item_or_product}'
             where item_id = '${itemId}'`;
             
             db.query("更新物料产品信息管理表", sql, (err, result) => {
                 if (err) {
                     res.send({code: 500, msg: '更新物料产品信息管理表失败'})
                     return
                 }
                 if(result.affectedRows > 0) {
                     res.send({code: 200, msg: '更新成功'})
                 }else{
                     res.send({code: 500, msg: '更新失败'})
                 }
             })
         })
        
     })
})

// 删除物料产品信息管理表
router.delete("/:id", (req, res) => {
    console.log("===========删除物料产品信息管理表接口============");
    // 获取参数
    let {id} = req.params;
     // 拼接sql,删除多条数据
     let sql = `delete from md_item where item_id in(${id})`;
    // 查询数据库
    db.query("删除物料产品信息管理表", sql, (err, result) => {
        if (err) {
            res.send({code: 500, msg: "删除物料产品信息管理表失败"})
            return
        }
        if(result.affectedRows > 0){
            res.send({code: 200, msg: "删除物料产品信息管理表成功"})
        }else{
            res.send({code: 500, msg: "删除物料产品信息管理表失败"})
        }
    })
})

module.exports = router;